package GEF;

import java.io.IOException;
import java.util.Observable;

import IU.Janela;
import Logica.Estado;
import Logica.aguardaAccao;
import Logica.aguardaLogin;


public class Aplicacao extends Observable{

	//private Preferences prefs;
//	static Socket socket = null;
//	private SERVER_ADDR sa;
	Estado estadoActual, estadoAnterior;
	boolean login=false;
	Pedido request;
	

	public Aplicacao(){
		super();
		estadoAnterior = estadoActual = new aguardaLogin(this);
		request = new Pedido();

		// create a Preferences instance
		// prefs = Preferences.userNodeForPackage(this.getClass());
		//
		// IP = prefs.get("SERVER_ADDRESS", null);
		// PORTO = prefs.getInt("SERVER_PORT", 0);
//		sa = new SERVER_ADDR();
//		socket = new Socket(sa.getIP(),sa.getPORTO());
	}
	
	
	
	public Estado getEstadoActual() {
		return estadoActual;
	}



	public void setEstadoActual(Estado estadoActual) {
		estadoAnterior = this.estadoActual;
		this.estadoActual = estadoActual;
		setChanged();
        notifyObservers();
	}
	
	
	public Estado getEstadoAnterior() {
		return estadoAnterior;
	}



	public void setEstadoAnterior(Estado estadoAnterior) {
		this.estadoAnterior = estadoAnterior;
	}
	

	public boolean conecta (){
		return request.Conectar();
	}
	
	public void desconecta (){
		try {
			request.Desconectar();
		} catch (ClassNotFoundException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Janela.ERRORMSG=e.toString();
		}
	}
	

	public boolean fazLogin(String username, char[] cs){
		if(!conecta())
			return false;
		this.setEstadoActual(estadoActual.fazLogin(username, cs));
		if (estadoActual==estadoAnterior){
			return false;
		}
		return true;
		
	}
	
	public boolean enviaLogin (String username, char[] cs){
		return request.Login(username, cs);
	}
	
	public void iniciaOrcamento (){
		this.setEstadoActual(estadoActual.iniciaOrcamento());
	}
	
}
